package com.gustavo.sistema.test;

import static org.junit.Assert.assertTrue;
import static org.junit.Assert.fail;

import java.util.Date;
import java.util.List;

import org.junit.Before;
import org.junit.Test;

import com.gustavo.sistema.dao.ClienteDao;
import com.gustavo.sistema.dao.ErroDeBancoDeDados;
import com.gustavo.sistema.dao.jdbc.ClienteDaoJdbc;
import com.gustavo.sistema.model.Cliente;

public class ClienteDaoJdbcTeste {

	private ClienteDao daojdbc;

	@Before
	public void setUp() {

		daojdbc = new ClienteDaoJdbc();

		Cliente cliente = new Cliente("74747-76575", "gdf@hdgd", "Rua dois de dezembro, 132", "Gustavo", new Date(), 1000);
		Cliente cliente2 = new Cliente("4352-452", "fdegd@yyyyy", "Rua carambola, 132", "Adriana", new Date(), 1000);

		try {
			daojdbc.inserirCliente(cliente);
			daojdbc.inserirCliente(cliente2);
		} catch (ErroDeBancoDeDados e) {
			e.printStackTrace();
		}
	}

	@Test
	public void testInserirCliente() {

		try {
			daojdbc = new ClienteDaoJdbc();
			Cliente cliente = new Cliente("73747-765475", "gdf@hdgd", "Rua dois de dezembro, 132", "Gustavo", new Date(), 1000);
			boolean resultado = daojdbc.inserirCliente(cliente);
			assertTrue("O cliente deve ser inserido com sucesso", resultado);
		} catch (ErroDeBancoDeDados e) {
			e.printStackTrace();
			fail("Erro ao executar testInserircliente");
		}
	}

	@Test
	public void testAtualizarCliente() {
		try {
			daojdbc = new ClienteDaoJdbc();
			Cliente cliente = daojdbc.consultaPorId(3);
			cliente.setEmail("gustavosouza01@hotmail.com");
			boolean resultado = daojdbc.atualizarCliente(cliente);
			assertTrue("O cliente deve ser atualizado com sucesso", resultado);
		} catch (ErroDeBancoDeDados e) {
			e.printStackTrace();
			fail("Erro ao executar testAtualizarcliente");
		}
	}

	@Test
	public void testExcluirCliente() {
		try {
			boolean resultado = daojdbc.excluirCliente(1);
			assertTrue("O cliente deve ser excluido com sucesso", resultado);
		} catch (ErroDeBancoDeDados e) {
			e.printStackTrace();
			fail("Erro ao executar testExcluircliente");
		}
	}

	@Test
	public void testListarClientes() {
		try {
			List<Cliente> clientes = daojdbc.listarClientes();
			assertTrue("A lista de clientes não pode estar vazia", (clientes != null && !clientes.isEmpty()));
		} catch (ErroDeBancoDeDados e) {
			e.printStackTrace();
			fail("Erro ao executar testListarclientes");
		}
	}

}
